home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
pctjja86.arc
/
TIMEREV.PRO
< prev
next >
Wrap
Text File
|
1985-11-13
|
1KB
|
56 lines
/* List reversal benchmark */
/* Modified for use with Arity/Prolog Compiler */
:- public main/0.
main :-
write('Number of iterations: '),
read(N),
generate(30, X),
time(Start),
fiftytests(X, N),
time(Aftertest),
fiftyplaceboes(X, N),
time(End),
tdif(Start, Aftertest, Testinterval),
tdif(Aftertest, End, Controlinterval),
Testtime is (Testinterval - Controlinterval) / N,
write(Testtime).
/* Number of logical inferences = (N**2 + N)/2 + N + 1, */
/* where N is the number of elements in the list. */
reverse([],[]).
reverse([X|Y],Z) :- reverse(Y,Y1), append(Y1,[X],Z).
append([],X,X).
append([X|Y],Z,[X|W]) :- append(Y,Z,W).
/* To perform the test, generate a 30-element list */
/* and then reverse it (446 logical inferences). */
generate(0,[]).
generate(N,[N|Y]) :- M is N-1, generate(M,Y).
fiftytests(X, N) :-
for(1, N, _),
reverse(X, Y),
fail.
fiftytests(_, _).
fiftyplaceboes(X, N) :-
for(1, N, _),
placebo(X, Y),
fail.
fiftyplaceboes(_, _).
placebo(_, _).
tdif(time(H1,M1,S1,Hn1), time(H2,M2,S2,Hn2), A) :-
A is (H2 - H1) * 3600 +
(M2 - M1) * 60 +
(S2 - S1) +
(Hn2 - Hn1) / float(100).
for(I, I, I) :- !.
for(I, J, I).
for(I, J, K) :- inc(I, I1), for(I1, J, K).